package com.superman.supermarket.client.event;

import java.util.Map;

import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.superman.supermarket.client.event.AddrListPageEvent.AddrListPageEventHandler;

/**
 * 地址列表事件
 * 
 * @author superman
 * @version 2018年7月12日下午4:21:31
 */
public class AddrListPageEvent extends GwtEvent<AddrListPageEventHandler> {

	/**
	 * 事件处理器
	 * 
	 * @author superman
	 * @version 2018年7月12日下午4:22:00
	 */
	public interface AddrListPageEventHandler extends EventHandler {
		/**
		 * 删除
		 * 
		 * @author superman
		 * @version 2018年8月6日 下午9:21:19
		 * @param addrId
		 */
		void delete(String addrId);

		/**
		 * 点击前往编辑
		 * 
		 * @author superman
		 * @version 2018年8月6日 下午9:21:21
		 * @param addrInfo
		 */
		void pushToEdit(Map<String, Object> addrInfo);

		/**
		 * 设为默认
		 * 
		 * @author superman
		 * @version 2018年8月6日 下午9:21:17
		 * @param addrId
		 */
		void setDefault(String addrId);
	}

	/**
	 * 事件定义
	 * 
	 * @author superman
	 * @version 2018年8月6日下午9:21:40
	 */
	public enum AddrListPageEventType {
		CLICK_TO_EDIT, DELETE, SET_DEFAULT
	}

	public static final Type<AddrListPageEventHandler> TYPE = new Type<AddrListPageEventHandler>();
	private Object contextData;

	private AddrListPageEventType eventType;

	/**
	 * 构造方法
	 * 
	 * @author superman
	 * @version 2018年8月6日 下午9:23:03
	 * @param contextData
	 * @param eventType
	 */
	public AddrListPageEvent(Object contextData, AddrListPageEventType eventType) {
		super();
		this.contextData = contextData;
		this.eventType = eventType;
	}

	@Override
	protected void dispatch(AddrListPageEventHandler handler) {
		switch (eventType) {
			case SET_DEFAULT:
				handler.setDefault((String) contextData);
				break;
			case DELETE:
				handler.delete((String) contextData);
				break;
			case CLICK_TO_EDIT:
				handler.pushToEdit((Map<String, Object>) contextData);
				break;

			default:
				break;
		}
	}

	@Override
	public Type<AddrListPageEventHandler> getAssociatedType() {
		return TYPE;
	}

}
